package com.woniu.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.stereotype.Component;
/**
 * @author:陈涵
 * @Do:JWT的工具类
 * @date: 2022/9/5 22:01
 */


import java.util.Date;

public class JWTUtils {
    private static final String SECRET_KEY="WONIUXY";
    private static final long EXPIRES = 30 * 1000 * 60;//30分钟过期时间
    /**
     * 生成token
     * ChangeLog : 1. 创建 (22/09/05/0005 17:11 [马宇航]);
     *
     * @return java.lang.String
     */
    public static String sign(String username,String password){
        long extime = System.currentTimeMillis() + EXPIRES;
        return JWT.create().withClaim("username", username)
                .withExpiresAt(new Date(extime))
                //签名的加密算法
                .sign(Algorithm.HMAC256(username+password+SECRET_KEY));
    }
    /**
     * 通过token返回用户名信息
     * ChangeLog :
     * @param token
     * @return java.lang.String
     */
    public static String getUsername(String token){
        DecodedJWT decode = JWT.decode(token);
        return decode.getClaim("username").asString();
    }
    /**
     * 返回校验结果
     * ChangeLog : 1. 创建 (22/09/05/0005 17:19 [马宇航]);
     * @param token
     * @return boolean
     */
    public static boolean verify(String token,String username,String password){
        //通过JWT工具类底层，帮你生成新的token，来判断之前的token有没有被篡改
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(username+password+SECRET_KEY)).withClaim("username", username).build();
        jwtVerifier.verify(token);
        return true;
    }
}